package org.example;

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Set;

public class DateDemo2 {
    public static  void main(String[] args) {


        System.out.println("==============1");
        //获取Java中支持的所有时区
        Set<String> zoneIds= ZoneId.getAvailableZoneIds();
        System.out.println(zoneIds.size());
        System.out.println(zoneIds);
        //获取系统默认时区
        ZoneId zoneId=ZoneId.systemDefault();
        System.out.println(zoneId);

        //epoch Milli\Second 是一个 long 类型的值，代表从 Unix 纪元开始经过的毫秒数。
        // 返回一个新的 Instant 对象，对应指定的时间点
        System.out.println("==============2");
        //获取当前时间的instant对象（标准时间）
        Instant now=Instant.now();
        System.out.println(now);
        //根据 秒 毫秒 纳秒 获取Instant对象
        Instant instant1=Instant.ofEpochMilli(0L);//在这段代码里，Instant.ofEpochMilli(0L) 创建了
        // 一个代表 Unix 纪元起始时刻（1970 年 1 月 1 日 00:00:00 UTC）的 Instant 对象。
        System.out.println(instant1);

        Instant instant2=Instant.ofEpochSecond(1L);
        System.out.println(instant2);
        //epochSecond xL  开始时间  加上    nanoAdjustment 纳秒
        Instant instant3=Instant.ofEpochSecond(2L,1000000000);
        System.out.println(instant3);


        System.out.println("==============3");
        //指定时间
        ZoneId zoneId1=ZoneId.of("Asia/Shanghai");
        ZonedDateTime time=Instant.now().atZone(zoneId1);
        System.out.println(time);
        //年月日 时分秒 纳秒 时区  方法指定获取时间对象
        ZonedDateTime time2=ZonedDateTime.of(2025,10,1,
                11,11,11,2,ZoneId.of("Asia/Shanghai"));
        System.out.println(time2);

        //通过instant+时区的方式指定获取时间对象
        Instant instant=Instant.ofEpochMilli(0L);
        System.out.println(instant);
        ZoneId zoneId2=ZoneId.of("Asia/Shanghai");
        ZonedDateTime time3=ZonedDateTime.ofInstant(instant, zoneId2);
        System.out.println(time3);


        System.out.println("==============4");
        //isXxx() 判断
        Instant instant4=Instant.ofEpochMilli(0L);
        Instant instant5=Instant.ofEpochMilli(1000L);
        boolean result1=instant4.isBefore(instant5);
        System.out.println(result1);
        boolean result2=instant5.isBefore(instant4);
        System.out.println(result2);


        System.out.println("==============5");
        //Instant minusXxx(long amountToSubtract)  减去指定的时间
        Instant instant6=Instant.ofEpochMilli(2000000000L);
        System.out.println(instant6);
        Instant instant7=instant6.minusSeconds(1);
        System.out.println(instant7);


        System.out.println("==============6");
        //获取时间对象
        ZonedDateTime time1=Instant.now().atZone(zoneId1);
        //DateTimeFormatter  格式化时间对象
        //ofPattern()  指定格式
        DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss a");
        String str=dtf.format(time1);
        System.out.println(str);

    }
}
